# Here an extract of package MIME::Lite::HTML package MIME::Lite::HTML; # module MIME::Lite::HTML : Provide routine to transform a HTML page in # a MIME::Lite mail # Copyright 2001 A.Barbet alian@alianwebserver.com. All rights reserved. # Revision 1.1 2002/02/07 15:58:35 bettini # added scanner for perl # # Revision 1.12 2002/01/07 20:18:53 alian # - Add replace links for frame & iframe # - Correct incorrect parsing in include_css for <LINK REL="SHORTCUT ICON"> # tag. Tks to doggy@miniasp.com for idea and patch # # Revision 1.11 2001/12/13 22:42:33 alian # - Correct a bug with relative anchor # # Revision 1.10 2001/11/07 10:52:43 alian # - Add feature for get restricted url. Add LoginDetails parameter for that # (tks to Leon.Halford@ing-barings.com for idea) # - Change error in POD doc rfc2257 => rfc2557 (tks to # justin.zaglio@morganstanley.com) # - Correct warning when $url_html is undef use LWP::UserAgent; use HTML::LinkExtor; use URI::URL; use MIME::Lite; use strict; use vars qw($VERSION @ISA @EXPORT @EXPORT_OK); require Exporter; @ISA = qw(Exporter); @EXPORT = qw(); my $LOGINDETAILS; #------------------------------------------------------------------------------ # redefine get_basic_credentials #------------------------------------------------------------------------------ { package RequestAgent; use vars qw(@ISA); @ISA = qw(LWP::UserAgent); sub new { my $self = LWP::UserAgent::new(@_); $self; } sub get_basic_credentials { my($self, $realm, $uri) = @_; # Use parameter of MIME-Lite-HTML, key LoginDetails if (defined $LOGINDETAILS) { return split(':', $LOGINDETAILS, 2); } # Ask user on STDIN elsif (-t) { my $netloc = $uri->host_port; print "Enter username for $realm at $netloc: "; my $user = <STDIN>; chomp($user); # 403 if no user given return (undef, undef) unless length $user; print "Password: "; system("stty -echo"); my $password = <STDIN>; system("stty echo"); print "\n"; # because we disabled echo chomp($password); return ($user, $password); } # Damm we got 403 with CGI (use param LoginDetails) ... else { return (undef, undef) } } } #------------------------------------------------------------------------------ # new #------------------------------------------------------------------------------ sub new { my $class = shift; my $self = {}; bless $self, $class; my %param = @_; # Agent name $self->{_AGENT} = new RequestAgent; $self->{_AGENT}->agent("MIME-Lite-HTML $VERSION"); $self->{_AGENT}->from('mime-lite-html@alianwebserver.com' ); # Set debug level if ($param{'Debug'}) { $self->{_DEBUG} = 1; delete $param{'Debug'}; } # Set Login information if ($param{'LoginDetails'}) { $LOGINDETAILS = $param{'LoginDetails'}; delete $param{'LoginDetails'}; } # Set type of include to do if ($param{'IncludeType'}) { die "IncludeType must be in 'extern', 'cid' or 'location'\n" if ( ($param{'IncludeType'} ne 'extern') and ($param{'IncludeType'} ne 'cid') and ($param{'IncludeType'} ne 'location')); $self->{_include} = $param{'IncludeType'}; delete $param{'IncludeType'}; } # Defaut type: use a Content-Location field else {$self->{_include}='location';} ## Added by Michalis@linuxmail.org to manipulate non-us mails if ($param{'TextCharset'}) { $self->{_textcharset}=$param{'TextCharset'}; delete $param{'TextCharset'}; } else { $self->{_textcharset}='iso-8859-1'; } if ($param{'HTMLCharset'}) { $self->{_htmlcharset}=$param{'HTMLCharset'}; delete $param{'HTMLCharset'}; } else { $self->{_htmlcharset}='iso-8859-1'; } if ($param{'TextEncoding'}) { $self->{_textencoding}=$param{'TextEncoding'}; delete $param{'TextEncoding'}; } else { $self->{_textencoding}='7bit'; } if ($param{'HTMLEncoding'}) { $self->{_htmlencoding}=$param{'HTMLEncoding'}; delete $param{'HTMLEncoding'}; } else { $self->{_htmlencoding}='quoted-printable'; } ## End. Default values remain as they were initially set. ## No need to change existing scripts if you send US-ASCII. ## If you DON't send us-ascii, you wouldn't be able to use ## MIME::Lite::HTML anyway :-) # Set proxy to use to get file if ($param{'Proxy'}) { $self->{_AGENT}->proxy('http',$param{'Proxy'}) ; print "Set proxy for http : ", $param{'Proxy'},"\n" if ($self->{_DEBUG}); delete $param{'Proxy'}; } # Set hash to use with template if ($param{'HashTemplate'}) { $param{'HashTemplate'} = ref($param{'HashTemplate'}) eq "HASH" ? $param{'HashTemplate'} : %{$param{'HashTemplate'}}; $self->{_HASH_TEMPLATE}= $param{'HashTemplate'}; delete $param{'HashTemplate'}; } $self->{_param} = \%param; # Ok I hope I known what I do ;-) MIME::Lite->quiet(1); return $self; } #------------------------------------------------------------------------------ # POD Documentation #------------------------------------------------------------------------------ =head1 NAME MIME::Lite::HTML - Provide routine to transform a HTML page in a MIME-Lite mail =head1 SYNOPSIS #!/usr/bin/perl -w # A cgi program that do "Mail this page to a friend"; # Call this script like this : # script.cgi?email=myfriend@isp.com&url=http://www.go.com use strict; use CGI qw/:standard/; use CGI::Carp qw/fatalsToBrowser/; use MIME::Lite::HTML; my $mailHTML = new MIME::Lite::HTML From => 'MIME-Lite@alianwebserver.com', To => param('email'), Subject => 'Your url: '.param('url'); my $MIMEmail = $mailHTML->parse(param('url')); $MIMEmail->send; # or for win user : $mail->send_by_smtp('smtp.fai.com'); print header,"Mail envoye (", param('url'), " to ", param('email'),")<br>\n"; =head1 DESCRIPTION This module is a Perl mail client interface for sending message that support HTML format and build them for you.. This module provide routine to transform a HTML page in MIME::Lite mail. So you need this module to use MIME-Lite-HTML possibilities =head2 What's happen ? The job done is: =over =item * Get the file (LWP) if needed =item * Parse page to find include images (gif, jpg, flash) =item * Attach them to mail with adequat header if asked (default) =item * Include external CSS,Javascript file =item * Replace relative url with absolute one =item * Build the final MIME-Lite object with each part found =back =cut